package com.summer.filesync.database.dao;

import com.summer.filesync.model.FileMetadata;
import java.util.List;
import java.util.Optional;

/** 文件元数据数据访问对象 提供文件元数据的数据库操作 */
public interface FileMetadataDAO extends BaseDAO<FileMetadata, Long> {

  /**
   * 根据文件路径查找文件元数据
   *
   * @param filePath 文件路径
   * @return Optional包装的文件元数据
   */
  Optional<FileMetadata> findByFilePath(String filePath);

  /**
   * 根据文件哈希查找文件元数据
   *
   * @param fileHash 文件哈希值
   * @return 匹配的文件元数据列表
   */
  List<FileMetadata> findByFileHash(String fileHash);

  /**
   * 根据最后修改时间范围查找文件
   *
   * @param startTime 开始时间
   * @param endTime 结束时间
   * @return 符合条件的文件列表
   */
  List<FileMetadata> findByLastModifiedBetween(long startTime, long endTime);

  /**
   * 根据文件大小范围查找文件
   *
   * @param minSize 最小大小
   * @param maxSize 最大大小
   * @return 符合条件的文件列表
   */
  List<FileMetadata> findByFileSizeBetween(long minSize, long maxSize);

  /**
   * 查找指定目录下的所有文件
   *
   * @param directoryPath 目录路径
   * @return 目录下的文件列表
   */
  List<FileMetadata> findByDirectory(String directoryPath);

  /**
   * 查找需要同步的文件（本地修改时间晚于数据库记录）
   *
   * @return 需要同步的文件列表
   */
  List<FileMetadata> findFilesNeedingSync();

  /**
   * 批量保存文件元数据
   *
   * @param fileMetadataList 文件元数据列表
   * @return 保存的数量
   */
  int batchSave(List<FileMetadata> fileMetadataList);

  /**
   * 删除指定目录下的所有文件记录
   *
   * @param directoryPath 目录路径
   * @return 删除的数量
   */
  int deleteByDirectory(String directoryPath);
}
